home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume91
/
libraris
/
sregexp1
/
part01
/
sregexpbase.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-20
|
3KB
|
162 lines
/*
*
* sregexpbase.h -- C include file for sregexp.library
*
* Copyright (C) 1991, Jon Spencer.
*
* Created: April 20,1991
*
*/
#ifndef LIBRARIES_SREGEXPBASE_H
#define LIBRARIES_SREGEXPBASE_H
#ifndef EXEC_TYPE_H
#include <exec/types.h>
#endif
#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif
#ifndef LIBRARIES_DOS_H
#include <libraries/dos.h>
#endif
/*
*
* Library base structure, all of these fields are private, and
* should not be accessed.
*
*/
struct SregExpBase {
struct Library LibNode;
struct Library *SysBase;
struct Library *DOSBase;
BPTR Segment;
};
#define SREGEXPNAME "sregexp.library"
/*
*
* Here are the defines for the structures used and returned by
* the various sreg functions. They should probably not be
* accessed for there contents, unless you have really good
* reason...
*
*/
struct SregExp {
char sre_Type,sre_Flag;
SHORT sre_MinLen;
union {
char onechar;
char *setchar;
char *string;
LONG number;
} sre_Data;
struct SregExp * sre_List[];
};
/* This is an internal structure for a singly linked list of sregexp's */
struct SregList {
struct SregExp *srl_sreg;
struct SregList *srl_next;
};
/* various types of wildcard pattern elements.
Goes in struct SregExp.type field */
#define SRP_SETCHAR 1
#define SRP_ANYCHAR 2
#define SRP_ONECHAR 3
#define SRP_STRING 4
#define SRP_NULL 5
#define SRP_OR 6
#define SRP_SUM 7
/* various flags to mark special properties of patterns.
Goes in struct SregExp.flag */
#define SRF_NOT (1<<0)
#define SRF_REPEAT (1<<1)
#define SRF_FIXLEN (1<<2)
#define SRF_JUSTDIRS (1<<6) /* special flag used in path matching */
#define SRF_RECURSE (1<<7) /* dito. */
/* defines for the wildcard characters */
#define CHR_REPEAT '#'
#define CHR_NOT '~'
#define CHR_OPENBRACE '('
#define CHR_CLOSEBRACE ')'
#define CHR_OPENSET '['
#define CHR_CLOSESET ']'
#define CHR_ANYCHAR '?'
#define CHR_NULL '%'
#define CHR_OR '|'
#define CHR_ESCAPE '\''
#define CHR_RANGE '-'
#define CHR_STAR '*'
/* These are the structures used for the path matching routines. */
struct SpathInfo {
struct SpathNode * spi_Head;
struct SpathNode * spi_Tail;
struct SpathNode * spi_TailPred;
struct SregList * spi_SregList;
};
/* Note: because of the fileinfoblock, this whole structure MUST
be longword aligned. */
struct SpathNode {
struct SpathNode * spn_Succ;
struct SpathNode * spn_Pred;
struct FileInfoBlock spn_FIB;
BPTR spn_Lock;
struct SregList * spn_SregList;
char * spn_NodeName;
short int spn_Flags;
};
/* flags used in spn_Flags, which is really library private */
#define SPF_DECEND (1<<0) /* Should recursively search, when we get the chance. */
#define SPF_DONEONCE (1<<1) /* Already done it, don't do again */
#define SPF_NEXTPARENT (1<<2) /* Next one is lock on parentdir */
/* These are the possible error returns sent by NextFile and BuildPath */
#define SPE_ALL_DONE -1 /* no more matching files */
#define SPE_ERROR -2 /* some error occured, see IoErr() */
#define SPE_BUFF_FULL -3 /* you didn't give me enough room! */
#define SPE_SIGBREAK -4 /* A control signal came through. */
/* Some defines for what kind of events we match to. */
#define SP_DIRS_ONLY 1
#define SP_BOTH 0
#define SP_FILES_ONLY -1
#endif